\documentclass{article}
\usepackage{listings} % 用于插入代码
\usepackage{tikz} % 用于绘制图形
\usetikzlibrary{trees} % 用于绘制树状图

\usepackage[letterpaper,top=2cm,bottom=2cm,left=3cm,right=3cm,marginparwidth=1.75cm]{geometry}
\usepackage[UTF8]{ctex}
% Useful packages
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorlinks=true, allcolors=blue]{hyperref}
\usepackage{listings}
% 设置 listings 宏包的参数
\lstset{
    language=C++, % 代码语言
    basicstyle=\ttfamily, % 基本字体风格
    keywordstyle=\bfseries, % 关键字风格
    commentstyle=\itshape, % 注释风格
    stringstyle=\ttfamily, % 字符串风格
    breaklines=true, % 自动换行
    columns=flexible, % 列的灵活性
    numbers=left, % 行号在左侧
    numberstyle=\tiny, % 行号字体大小
    frame=single, % 代码框
    showstringspaces=false % 不显示字符串中的空格
}



\title{样条实现大作业报告}
\author{3220100159 梁越}

\begin{document}
	\maketitle

\section*{A.}
我们对N = 6, 11, 21, 41, 81的时候做三种不同的样条插值，绘出样条曲线与真正曲线并计算各小区间中点的误差的最大值(即无穷范数),得到如下结果:
\begin{lstlisting}
N=6
 Maximum error for complete PP spline: 0.418768
 Maximum error for natural PP spline: 0.444176
 Maximum error for periodic PP spline: 0.426923
N=11
 Maximum error for complete PP spline: 0.0206535
 Maximum error for natural PP spline: 0.0206675
 Maximum error for periodic PP spline: 0.0205283
N=21
 Maximum error for complete PP spline: 0.0031691
 Maximum error for natural PP spline: 0.00508781
 Maximum error for periodic PP spline: 0.00316894
N=41
 Maximum error for complete PP spline: 0.000613855
 Maximum error for natural PP spline: 0.0019399
 Maximum error for periodic PP spline: 0.000275356
N=81
 Maximum error for complete PP spline: 0.00026879
 Maximum error for natural PP spline: 0.000848863
 Maximum error for periodic PP spline: 1.609e-05

\end{lstlisting}
通过公式：\[convergerate=\frac{log(\frac{error[i-1]}{error[i]})}{\frac{N[i-1]}{N[i]}}\]计算收敛率并绘图，可看到收敛率在2-5左右。观察绘出的样条曲线，以及计算出的误差值，发现在n=6时，误差较大，n=11时及以上，三种pp样条拟合度均很高，且没有龙格现象。具体图片见 spline\_comparison\_N6.png 等
\section*{B、C、D.}
实现了二阶B样条，运行结果显示三阶完全B样条拟合效果很好，但是二阶B样条拟合效果略差，可能是由于节点不够密集或取的节点性质不够好导致的。具体图片见\\spline\_comparison\_cubic.png,spline\_comparison\_quadratic.png.\\
定义\(E_S(x) = \left| S(x) - f(x) \right|\),计算后得到误差分别如下：
\begin{lstlisting}
Point: -3.500000, Cubic Error: 0.000679, Quadratic Error: 0.000000
Point: -3.000000, Cubic Error: 0.000000, Quadratic Error: 0.013764
Point: -0.500000, Cubic Error: 0.020519, Quadratic Error: 0.000000
Point: 0.000000, Cubic Error: 0.000000, Quadratic Error: 0.030174
Point: 0.500000, Cubic Error: 0.020565, Quadratic Error: 0.000000
Point: 3.000000, Cubic Error: 0.000000, Quadratic Error: 0.013764
Point: 3.500000, Cubic Error: 0.002539, Quadratic Error: 0.000000
\end{lstlisting}
观察数据，注意到，误差有时候为0，这可能是因为样条计算时用到了这个点，这时的误差很小，计算出的误差超出计算器的机器精度，所以显示为0；而另一部分点事样条插值计算出来的，误差会比较大，在机器精度内，所以正常显示出来。\\
总体来说，三阶样条的误差比二阶样条小一到两个数量级，并且从图上我们也看出，三阶样条拟合效果更好。
\section*{E.}
将给出的函数均转为参数方程，于是我们得到三个函数，分别是：
\[f_1(t) = \begin{pmatrix}
\sqrt{3} \sin(2\pi t) \\
\frac{2}{3} \left( \sqrt{3} \cos(2\pi t) + \sqrt{|\sqrt{3} \sin(2\pi t)|} \right)
\end{pmatrix}\]
\[f_2(t) = \begin{pmatrix}
\sin(t) + t \cos(t) \\
\cos(t) - t \sin(t)
\end{pmatrix}\]
\[f_3(t) = \begin{pmatrix}
\sin(\cos(t)) \cos(\sin(t)) \\
\sin(\cos(t)) \sin(\sin(t)) \\
\cos(\cos(t))
\end{pmatrix}\]
利用B样条分别拟合x和y(z)（均为t的函数），然后进行绘制。\\
绘制曲线见：\\
等距节点：fi\_uniform\_plot\_N.gp 等\\
cumulative chordal length节点：fi\_cumulative\_plot\_N.gp等\\
在节点数较少时，发现绘制曲线误差较高，随着节点数增加，几乎完全拟合，绘图发现自然样条拟合效果往往最好，因为他不需要边界的导数信息，从而避免了t=0时导数不存在（心形曲线）的问题，但差别不大。另外，已经证明，相同条件下PP样条和B样条的拟合效果完全一致，故略去PP样条
但是似乎均匀节点绘制出的图形更精确。
\section*{F.}
（递归计算高阶差商）\\
绘制差商表时，0阶差商即截断幂函数本身在同一张图上，为pow\_trunc\_ni.png\\
一阶差商和二阶则分别保存，为diff\_1\_ni,png和diff\_2\_ni.png(一阶)\\
diff\_3\_ni.png.(二阶)(i=1,2)
\end{document}
